﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
//using habilitaciones.core.modelo;
using habilitaciones.core.util;
using habilitaciones.core.modelo;



namespace habilitaciones.data.dao
{
    public class HabilitacionesDao
    {
        /*=== Variables de instancia ===*/
        #region Variables de instancia

        string _cnx;
        #endregion


        /*=== Propiedades ===*/
        #region Propiedades



        #endregion


        /*=== Métodos estáticos ===*/
        #region Métodos estáticos
        #endregion


        /*=== Constructores ===*/
        #region Constructores
        public HabilitacionesDao(string cnx)
        {
            _cnx = cnx;
        }
        #endregion


        /*=== Métodos ===*/
        #region Métodos Escenarios
        /*private List<SEGUsuarios> cargarUsuarios(HAEscenario e)
        {
            e.SEGUsuarios.Load();
            return e.SEGUsuarios.ToList();
        }
        public List<HAEscenario> TraerEscenarios(SEGUsuarios usuario, int? idEscenario)
        {
            var escenarios = new List<HAEscenario>();
            if (idEscenario == null)
                if (usuario == null)
                    escenarios = (from e in Modelo.HAEscenario
                                  select e).ToList();
                else
                    escenarios = (from e in Modelo.HAEscenario
                                  from u in e.SEGUsuarios
                                  where u.id == usuario.id
                                  select e).ToList();
            else
                if (usuario == null)
                    escenarios = Modelo.HAEscenario.Where(c => c.IdEscenario == idEscenario.Value).ToList();
                else
                    escenarios = (from e in Modelo.HAEscenario
                                  from u in e.SEGUsuarios
                                  where u.id == usuario.id && e.IdEscenario == idEscenario
                                  select e).ToList();

            return escenarios;
        }



        public List<SEGUsuarios> TraerUsuarioEscenarios(HAEscenario Escenario)
        {
            var usuarios = new List<SEGUsuarios>();
            if (Escenario == null)
                throw new haberesException(haberesCts.NO_SELECCIONO_ESCENARIO);
            else
                usuarios = Escenario.SEGUsuarios.ToList();

            return usuarios;
        }

        public List<HACabecera> TraerTiposLiquidacionEscenarios(HAEscenario Escenario)
        {
            var tipos = new List<HACabecera>();
            if (Escenario == null)
                tipos = (from a in Modelo.HACabecera
                         select a).ToList();
            else
                tipos = (from a in Modelo.HAEscenarioCabecera
                         where a.RefEscenario == Escenario.IdEscenario
                         select a.HACabecera).ToList();

            return tipos;
        }


        public List<PersonasALiquidar> TraerDatosPreliquidacion(byte idEscenario, int? idPersona)
        {
            return Modelo.TraePersonasPorEscenario(idEscenario, idPersona).ToList();
        }
        */
        #endregion


        public Usuarios TraerUsuarioPorLogin(string login)
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                Usuarios retorno = (from u in Modelo.Usuarios
                                    where u.Usuario == login
                                    select u).SingleOrDefault();
                return retorno;
            }
        }

        public List<Usuarios> TraerUsuarios()
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                List<Usuarios> us = (from m in Modelo.Usuarios
                                    select m).ToList();
                return us;
            }
        }

        public void GuardarUsuario(string idusuario, string usuario, string calve, bool administrador)
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                Usuarios us = (from m in Modelo.Usuarios
                               where m.Usuario == usuario
                                     select m).SingleOrDefault();
                if (us == null)
                {
                    us = new Usuarios();
                    us.Usuario = usuario;
                    us.Contraseña = calve;
                    us.Rol = (administrador == true) ? "Administrador" : "Empleado";
                    Modelo.AddToUsuarios(us);
                }
                else
                {
                    us.Usuario = usuario;
                    us.Contraseña = calve;
                    us.Rol = (administrador == true) ? "Administrador" : "Empleado";
                    
                }
                Modelo.SaveChanges();
            } 
        }



        public List<Ordenes> BuscarPorDocumento(int valor)
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                List<Ordenes> ordenes = (from m in Modelo.Ordenes
                                         from t in m.OrdenesPersonas
                                         where t.Personas.NroDocumento == valor
                                         select m).ToList();
                foreach (var item in ordenes)
                {
                    foreach (var a in item.OrdenesPersonas)
                    {
                        a.RolesReference.Load();
                        a.PersonasReference.Load();
                    }
                    item.VehiculosReference.Load();
                    
                }
                return ordenes;
            } 
        }

        public List<Rubros> TraerRubros()
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                List<Rubros> rubros = (from m in Modelo.Rubros
                                         select m).ToList();
                return rubros;
            } 
        }

        public Vehiculos BuscarVehiculoPorDominio(string dominio)
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                Vehiculos vehiculo = (from m in Modelo.Vehiculos
                                       where m.Dominio == dominio
                                       select m).SingleOrDefault();
                return vehiculo;
            } 
        }

        public List<TiposDocumento> TraerTiposDocumentos()
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                return (from m in Modelo.TiposDocumento
                        select m).ToList();
            } 
        }

        public List<Municipios> TraerMunicipios()
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                return (from m in Modelo.Municipios
                        select m).ToList();
            } 
        }

        public List<Localidades> TraerLocalidades()
        {
            using (var Modelo = new HabilitacionesEntidades(_cnx))
            {
                return (from l in Modelo.Localidades
                        select l).ToList();
            }
        }

        public Personas BuscarPersonaPorDocumento(string dni)
        {
            Personas returno = null;
            if (dni != null)
            {
                using (var Modelo = new HabilitacionesEntidades(_cnx))
                {
                    returno = (from p in Modelo.Personas
                            where (dni == null) || (p.NroDocumento == int.Parse(dni))
                            select p).SingleOrDefault();
                }
            }
            return returno;
        }
    }
}